//
// Created by LiuYou on 2021/10/22.
//

#include <iostream>


/**
    Declared in: time.h  extern time_t time(time_t *__timer)
    Return the current time and put it in *TIMER if TIMER is not NULL.
    如果 TIMER 不为 NULL，则返回当前时间并将其放入 TIMER。

    TIME(3am)                  GNU Awk Extension Modules                 TIME(3am)

    NAME
           time - time functions for gawk

    SYNOPSIS
           @load "time"

           time = gettimeofday()
           ret = sleep(amount)

    CAUTION
           This  extension  is  deprecated  in favor of the timex extension in the
           gawkextlib project.  In the next major release of gawk, loading it will
           issue  a warning.  It will be removed from the gawk distribution in the
           major release after the next one.

    DESCRIPTION
           The time extension adds two functions named gettimeofday() and sleep(),
           as follows.
           时间扩展添加了两个名为 gettimeofday() 和 sleep() 的函数，如下所示。

           gettimeofday()
                  This function returns the number of seconds since the Epoch as a
                  floating-point value. It should have  subsecond  precision.   It
                  returns -1 upon error and sets ERRNO to indicate the problem.
                  此函数以浮点值形式返回自 Epoch 以来的秒数。它应该具有亚秒级精度。
                  它在出错时返回 -1 并设置 ERRNO 以指示问题。

           sleep(seconds)
                  This function attempts to sleep for the given amount of seconds,
                  which may include a fractional portion.  If seconds is negative,
                  or  the  attempt to sleep fails, then it returns -1 and sets ER-
                  RNO.  Otherwise, the function should return 0 after sleeping for
                  the indicated amount of time.
                  此函数尝试在给定的秒数内休眠，其中可能包括小数部分。如果 seconds 为负数，
                  或者睡眠尝试失败，则返回 -1 并设置 ER-RNO。否则，该函数应在休眠指定时间后返回 0。

    EXAMPLE
           @load "time"
           ...
           printf "It is now %g seconds since the Epoch\n", gettimeofday()
           printf "Pausing for a while... " ; sleep(2.5) ; print "done"

    SEE ALSO
           GAWK:   Effective   AWK   Programming,   filefuncs(3am),  fnmatch(3am),
           fork(3am),  inplace(3am),  ordchr(3am),  readdir(3am),   readfile(3am),
           revoutput(3am), rwarray(3am).

           gettimeofday(2), nanosleep(2), select(2).

    AUTHOR
           Arnold Robbins, arnold@skeeve.com.

    COPYING PERMISSIONS
           Copyright (C) 2012, 2013, 2018, Free Software Foundation, Inc.

           Permission  is  granted  to make and distribute verbatim copies of this
           manual page provided the copyright notice and  this  permission  notice
           are preserved on all copies.

           Permission  is granted to copy and distribute modified versions of this
           manual page under the conditions for verbatim  copying,  provided  that
           the  entire  resulting derived work is distributed under the terms of a
           permission notice identical to this one.

           Permission is granted to copy and distribute translations of this  man-
           ual page into another language, under the above conditions for modified
           versions, except that this permission notice may be stated in a  trans-
           lation approved by the Foundation.

    Free Software Foundation          Nov 21 2019                        TIME(3am)
 */



int main(int argc, char** argv) {
    int64_t count = 0;
    time_t end = time( nullptr ) + 5;
    while (time( nullptr ) <= end) {
        ++count;
    }
    printf( "%ld\n", count );


    return 0;
}

/*
liuyou@liuyou-virtual-machine:~/CLionProjects/LinuxEnvironmentProgramming2/src/concurrence/parallel/signal$ g++ Signal-5sec.cpp
liuyou@liuyou-virtual-machine:~/CLionProjects/LinuxEnvironmentProgramming2/src/concurrence/parallel/signal$ ./a.out
2229198943
liuyou@liuyou-virtual-machine:~/CLionProjects/LinuxEnvironmentProgramming2/src/concurrence/parallel/signal$ time ./a.out > /tmp/out

real    0m5.935s
user    0m5.687s
sys     0m0.097s
liuyou@liuyou-virtual-machine:~/CLionProjects/LinuxEnvironmentProgramming2/src/concurrence/parallel/signal$ time ./a.out > /tmp/out

real    0m5.835s
user    0m5.739s
sys     0m0.036s
// todo 笔记: 使用 time(); 来计时的话, 计的时间越短的话, 那么误差的累计值就越高。
// todo 笔记: 计的时间越长的话, 那么误差的累计值还是1秒。
 */